Method IsDescendantOfAsync<T>(IRedbObject, IRedbObject, ITreeProvider)
OPTIMIZED version: Checks if object is descendant of specified parent
Uses already loaded hierarchy from GetPathToRootAsync, but adds cycle protection
public static Task<bool> IsDescendantOfAsync<T>(this IRedbObject obj, IRedbObject potentialAncestor, ITreeProvider treeProvider) where T : class, new()